/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_kernel.htm
 *
 * Zhiqim Kernel is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.kernel.service;

/**
 * 工程服务，实现了工程服务接口的类，在conf/zhiqim.xml中配置则会注册到全局中
 * 
 * @version v1.0.0 @author zouzhigang 2014-2-27 新建与整理
 */
public interface Service extends MultiInstance
{
    /*********************************************************/
    //服务编号
    /*********************************************************/
    
    /** 设置服务编号,对应conf/zhiqim.xml/service/key */
    void setId(String id);
    
    /** 获取服务编号 */
    String getId();
    
    /*********************************************************/
    //类加载器
    /*********************************************************/
    
    /** 获取类加载器 */
    ClassLoader getClassLoader();

    /** 设置类加载器 */
    void setClassLoader(ClassLoader classLoader);
    
    /*********************************************************/
    //服务创建和销毁
    /*********************************************************/
    
    /**
     * 服务创建接口，配置信息从全局中读取
     * 
     * @return boolean =true,启动成功,=false,启动失败
     * @throws Exception Startup捕捉,打印日志,作失败处理
     */
    boolean create() throws Exception;
    
    /**
     * 服务销毁接口，配置信息从全局中读取
     * 
     * @throws Exception Hook捕捉,打印日志,异常不处理，直接退出
     */
    void destroy() throws Exception;
    
    /*********************************************************/
    //更新和测试更新配置
    /*********************************************************/
    
    /**
     * 测试更新配置
     * 
     * @return              =true表示可以更新，=false表示更新可能有问题
     * @throws Exception    异常时表示不可更新
     */
    boolean test() throws Exception;
    
    /**
     * 服务更新配置
     * 
     * @throws Exception 出现更新异常通知配置端
     */
    void update() throws Exception;
}
